์ž‘์„ฑ: 2026-03-04 04:03:38์ˆ˜์ •: 2026-03-04 04:03:38

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์‹ค์ „ ์‚ฌ์šฉ๋ฒ• ๋ฐ ์‹œ๋‚˜๋ฆฌ์˜ค๋ณ„ ์˜ˆ์ œ

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ข…๋ฅ˜๋ฅผ ์•„๋Š” ๊ฒƒ๋ณด๋‹ค ์ค‘์š”ํ•œ ๊ฒƒ์€ **"์–ด๋–ป๊ฒŒ ํšจ์œจ์ ์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค๋ฃจ๋Š”๊ฐ€(CRUD)"**์ž…๋‹ˆ๋‹ค. ๊ฐ€์žฅ ๋งŽ์ด ์“ฐ์ด๋Š” SQL๊ณผ NoSQL์˜ ํ•ต์‹ฌ ์‚ฌ์šฉ๋ฒ•์„ ์‹ค๋ฌด ์‹œ๋‚˜๋ฆฌ์˜ค์™€ ํ•จ๊ป˜ ์ •๋ฆฌํ•ฉ๋‹ˆ๋‹ค.


1. ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค (SQL - MySQL/PostgreSQL)

์‹œ๋‚˜๋ฆฌ์˜ค: ์‡ผํ•‘๋ชฐ ์ฃผ๋ฌธ ๋ฐ ํšŒ์› ๊ด€๋ฆฌ

โ‘  ๋ฐ์ดํ„ฐ ์ƒ์„ฑ (INSERT)

INSERT INTO users (name, email) VALUES ('ํ™๊ธธ๋™', '[email protected]');

โ‘ก ๋ณต์žกํ•œ ์กฐ๊ฑด ์กฐํšŒ (SELECT + JOIN)

SELECT u.name, o.order_date, o.total_price
FROM users u
JOIN orders o ON u.id = o.user_id
WHERE u.name = 'ํ™๊ธธ๋™'
ORDER BY o.order_date DESC;

โ‘ข ๋ฐ์ดํ„ฐ ์ˆ˜์ • (UPDATE)

UPDATE users SET email = '[email protected]' WHERE id = 1;

โ‘ฃ ๋ฐ์ดํ„ฐ ์‚ญ์ œ (DELETE) - ์ฃผ์˜์‚ฌํ•ญ ํฌํ•จ

  • Hard Delete (๋ฌผ๋ฆฌ ์‚ญ์ œ): ๋ฐ์ดํ„ฐ๋ฅผ DB์—์„œ ์™„์ „ํžˆ ์ง€์›๋‹ˆ๋‹ค.
    DELETE FROM users WHERE id = 1; -- WHERE์ ˆ์ด ์—†์œผ๋ฉด ๋ชจ๋“  ๋ฐ์ดํ„ฐ๊ฐ€ ์‚ญ์ œ๋˜๋‹ˆ ์ฃผ์˜!
  • Soft Delete (๋…ผ๋ฆฌ ์‚ญ์ œ - ์‹ค๋ฌด ๊ถŒ์žฅ): ์‹ค์ œ๋กœ ์ง€์šฐ์ง€ ์•Š๊ณ  '์‚ญ์ œ ์—ฌ๋ถ€' ์ƒํƒœ๋งŒ ๋ณ€๊ฒฝํ•ฉ๋‹ˆ๋‹ค. ๋ฐ์ดํ„ฐ ๋ณต๊ตฌ๊ฐ€ ๊ฐ€๋Šฅํ•˜๊ณ  ํ†ต๊ณ„ ๋ถ„์„์— ์œ ๋ฆฌํ•ฉ๋‹ˆ๋‹ค.
    UPDATE users SET is_deleted = true, deleted_at = NOW() WHERE id = 1;

2. ๋ฌธ์„œ ๊ธฐ๋ฐ˜ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค (NoSQL - MongoDB)

์‹œ๋‚˜๋ฆฌ์˜ค: ๋ธ”๋กœ๊ทธ ํฌ์ŠคํŠธ ๊ด€๋ฆฌ

โ‘  ๋ฐ์ดํ„ฐ ์ƒ์„ฑ ๋ฐ ์ˆ˜์ •

db.posts.insertOne({ title: "์•ˆ๋…•, ๋ชฝ๊ณ DB!", content: "์œ ์—ฐํ•œ ๊ตฌ์กฐ" });
db.posts.updateOne({ title: "์•ˆ๋…•, ๋ชฝ๊ณ DB!" }, { $set: { content: "์ˆ˜์ •๋œ ๋‚ด์šฉ" } });

โ‘ก ๋ฐ์ดํ„ฐ ์‚ญ์ œ (Delete)

  • ๋‹จ๊ฑด ์‚ญ์ œ: ์กฐ๊ฑด์— ๋งž๋Š” ์ฒซ ๋ฒˆ์งธ ๋ฌธ์„œ๋งŒ ์‚ญ์ œํ•ฉ๋‹ˆ๋‹ค.
    db.posts.deleteOne({ _id: ObjectId("60f...") });
  • ๋‹ค๊ฑด ์‚ญ์ œ: ์กฐ๊ฑด์— ๋งž๋Š” ๋ชจ๋“  ๋ฌธ์„œ๋ฅผ ์‚ญ์ œํ•ฉ๋‹ˆ๋‹ค.
    db.posts.deleteMany({ status: "draft" }); // ์ดˆ์•ˆ ์ƒํƒœ์ธ ๋ชจ๋“  ๊ธ€ ์‚ญ์ œ

3. ํ‚ค-๊ฐ’ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค (NoSQL - Redis)

์‹œ๋‚˜๋ฆฌ์˜ค: ์„ธ์…˜ ๋ฐ ์บ์‹œ ๊ด€๋ฆฌ

โ‘  ๊ฐ’ ์ €์žฅ ๋ฐ ์‚ญ์ œ

  • ์‚ญ์ œ (DEL): ํ‚ค๋ฅผ ์ฆ‰์‹œ ์‚ญ์ œํ•ฉ๋‹ˆ๋‹ค.
    DEL session:user:1
  • ์ž๋™ ์‚ญ์ œ (Expire): ํŠน์ • ์‹œ๊ฐ„ ๋’ค์— ์ž๋™์œผ๋กœ ์‚ฌ๋ผ์ง€๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค.
    EXPIRE session:user:1 3600 # 1์‹œ๊ฐ„ ๋’ค ์‚ญ์ œ

4. ์‚ญ์ œ ์ž‘์—… ์‹œ ์‹ค๋ฌด ๊ฐ€์ด๋“œ (Best Practice)

  1. WHERE์ ˆ ํ™•์ธ ๋˜ ํ™•์ธ: UPDATE๋‚˜ DELETE๋ฅผ ์‹คํ–‰ํ•˜๊ธฐ ์ „์—๋Š” ๋ฐ˜๋“œ์‹œ ๊ฐ™์€ ์กฐ๊ฑด์œผ๋กœ SELECT๋ฅผ ๋จผ์ € ํ•ด๋ณด์„ธ์š”. ๋‚ด๊ฐ€ ์ง€์šฐ๋ ค๋Š” ๋ฐ์ดํ„ฐ๊ฐ€ ๋งž๋Š”์ง€ ํ™•์ธํ•˜๋Š” ์Šต๊ด€์ด ๋Œ€ํ˜• ์‚ฌ๊ณ ๋ฅผ ๋ง‰์Šต๋‹ˆ๋‹ค.
  2. ๊ฐ€๊ธ‰์  Soft Delete ์‚ฌ์šฉ: ํšŒ์› ํƒˆํ‡ด๋‚˜ ์ฃผ๋ฌธ ์ทจ์†Œ ๊ฐ™์€ ๋ฐ์ดํ„ฐ๋Š” ๋‚˜์ค‘์— ๋ถ„์Ÿ ํ•ด๊ฒฐ์ด๋‚˜ ๋ฐ์ดํ„ฐ ๋ถ„์„์„ ์œ„ํ•ด is_deleted ๊ฐ™์€ ์ปฌ๋Ÿผ์„ ํ™œ์šฉํ•ด ๋ณด๊ด€ํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.
  3. ๋ฐฑ์—… ๋ฐ ๋กœ๊ทธ: ์ค‘์š”ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ์ง€์šธ ๋•Œ๋Š” ์‚ญ์ œ ์ „ ๋กœ๊ทธ๋ฅผ ๋‚จ๊ธฐ๊ฑฐ๋‚˜ ๋ฐฐํฌ ์ „ ๋ฐฑ์—…๋ณธ์ด ์žˆ๋Š”์ง€ ํ™•์ธํ•˜์„ธ์š”.

๊ฒฐ๋ก 

์ƒ์„ฑ(C), ์กฐํšŒ(R), ์ˆ˜์ •(U)๋„ ์ค‘์š”ํ•˜์ง€๋งŒ, ์‚ญ์ œ(D)๋Š” ๊ฐ€์žฅ ์œ„ํ—˜ํ•˜๊ณ  ์‹ ์ค‘ํ•ด์•ผ ํ•˜๋Š” ์ž‘์—…์ž…๋‹ˆ๋‹ค. ๊ฐ DB์˜ ํŠน์„ฑ์— ๋งž๋Š” ์‚ญ์ œ ์ „๋žต์„ ์„ธ์›Œ ๋ฐ์ดํ„ฐ์˜ ์•ˆ์ „์„ฑ์„ ์ง€ํ‚ค์„ธ์š”!